home *** CD-ROM | disk | FTP | other *** search
/ Hot Metal Pro 4.0 / Hot Metal Pro 4.0.iso / HMPTools / VRCreate / data.z / Moveable - with Gravity.beh < prev    next >
Encoding:
Text File  |  1997-05-20  |  2.0 KB  |  67 lines

  1. #VRML V2.0 utf8
  2. # Copyright (c) 1997 PLATINUM technology, inc. 
  3. #ADD_PLANE_SENSOR
  4.  
  5. DEF $OBJECTFallingTimer TimeSensor {loop FALSE }
  6. DEF $OBJECTGravity Script {
  7.     eventIn     SFBool         isActive
  8.     eventIn        SFFloat        fall
  9.     eventIn        SFVec3f        userMovementPosition
  10.     field        SFVec3f        current                0 0 0
  11.     field        SFFloat        gravityConstant     9.8
  12.     field        SFFloat     startHeight            0
  13.     field        SFFloat        gravityBaseOffset            0
  14.     eventOut    SFTime        startFallingTime
  15.     eventOut    SFTime        hitgravityBaseOffsetTime
  16.     eventOut    SFTime        theCycleInterval
  17.     eventOut    SFVec3f        newPosition
  18.     field        SFFloat        cycleInterval        0
  19.     field        SFFloat        t                    0
  20.     field        SFVec3f        pos                    0 0 0
  21.     url "vrmlscript:
  22.         function userMovementPosition(value)
  23.             {
  24.              current=value;
  25.             }
  26.         function isActive(value,ts)
  27.             {    
  28.                 if((!value) && (current[1] > 0.0)) 
  29.                 {    
  30.                     startHeight=current[1];
  31.                     cycleInterval=Math.sqrt((2*(startHeight-gravityBaseOffset))/gravityConstant);
  32.                     theCycleInterval=cycleInterval;
  33.                     startFallingTime=ts;
  34.                 }
  35.                 
  36.             }
  37.          function fall(value,ts)
  38.                 {
  39.                      t=value*cycleInterval;
  40.                      pos[0]=current[0];
  41.                      pos[1]=startHeight-((.5*gravityConstant)*t*t);
  42.                      pos[2]=current[2];
  43.                      if (value >= 0.99)
  44.                         {
  45.                          hitgravityBaseOffsetTime=ts;
  46.                         }
  47.                      newPosition=pos;
  48.                 }
  49.  
  50.     "
  51. }
  52. ROUTE $OBJECTPS.isActive                     TO $OBJECTGravity.isActive
  53. ROUTE $OBJECTGravity.startFallingTime         TO $OBJECTFallingTimer.set_startTime
  54. ROUTE $OBJECTGravity.theCycleInterval         TO $OBJECTFallingTimer.set_cycleInterval
  55. ROUTE $OBJECTGravity.newPosition            TO $OBJECTPS.set_offset
  56. ROUTE $OBJECTFallingTimer.fraction_changed     TO $OBJECTGravity.fall
  57. ROUTE $OBJECTGravity.newPosition            TO $OBJECTPS.set_offset
  58. ROUTE $OBJECTPS.translation_changed         TO $OBJECT.set_translation
  59. ROUTE $OBJECTPS.translation_changed         TO $OBJECTGravity.userMovementPosition
  60. ROUTE $OBJECTGravity.newPosition            TO $OBJECT.set_translation
  61. ROUTE $OBJECTGravity.newPosition            TO $OBJECTGravity.userMovementPosition
  62.  
  63.  
  64.  
  65.  
  66.  
  67.